#ifndef TERRITOIRE_H
#define TERRITOIRE_H

#include <vector>
#include <queue>
#include "Hexagone.hpp"

class Camp;

class Territoire
{
    public:
        Territoire();
        void setNbDe(int nbD);
        int getNbDe() const;
        void setNbDesCourant(int nbDes);
        int getNbDesCourant() const;
        void setIndice(int indice);
        int getIndice() const;
        void setIndiceCamp(int indiceCamp, Camp* c);
        int getIndiceCamp() const;
        void setFillColor(bool b);
        const sf::Color& getFillColor() const;
        void setVoisin(int voisin);
        int getVoisin(int indice) const;

        std::vector<int> getVoisins() const;

        int getNbVoisins() const;
        void setSurface(const Hexagone& h);
        const Hexagone& getSurface(int indice) const;
        int getNbHexagones() const;
        void setFrontiere(const sf::ConvexShape& frontiere);
        const sf::ConvexShape& getFrontiere() const;
        void setOutlineColor(const sf::Color& c);
        const sf::Color& getOutlineColor() const;
        void setOutline();
        void ajouterHexagone(Hexagone &h,std::vector<Hexagone> &v);
        void dessiner(sf::RenderTarget &target) const;

        bool ajouterDes();
        void retirerDes(int nbDes);
        void deplacement(Territoire* T, int nbDes);
        bool memeCamp(Territoire* T);
        bool aCote(Territoire* T);
        bool attaquable(Territoire* T);
        bool existeChemin(int n,Territoire** terri,Territoire* T);
        bool actionPossible();

        virtual ~Territoire();
    protected:
    private:
        int nbDes;
        int nbDesCourant;
        int indice;
        int indiceCamp;
        std::vector<int> voisins;
        std::vector<Hexagone> surface;
        sf::ConvexShape frontiere;
};

#endif // TERRITOIRE_H
